Approvals V2 — structured grants, counter-proposals, risk & audit
A permission ask is no longer Allow/Deny. It is a grant: scope (paths + hosts) × duration (once · this task · this session) × a risk verdict. Hierarchy law, top to bottom: what it does → why → scope → risk → delta against grants you already gave. The raw command is Details, collapsed — evidence, not the headline. “Allow for this task” is the recommended default and the only filled button. “Always allow this session” is deliberately demoted into ⋯ More. Timeout always fails closed = denied. Colour law unchanged: terracotta = the recommended action · amber = medium risk / grant delta · red = high risk, deny, timeout · green at 70% = something that already ran.
Frame 1 · Mobile sheet — normal390×844 · dark · MEDIUM risk · queued 1/3 · details collapsed
9:41
cc-pocket · auth-refactorask
daemon · macbook-pro·claude-sonnet-4.6
CLAUDE
Refactor is in. I'll run the suite and push a coverage report so the PR shows the delta.
edit · src/auth/session.ktdone
bash · ./gradlew assembledone
Run command · BashMedium1/318s
Runs the full test suite and uploads a coverage report to Codecov.
So the pull request for the auth refactor shows the coverage delta.
Scopesrc/**coverage/**api.codecov.io
Sends coverage data to an external host. Reads a token from your environment. No source files are written.
outside current task grant: network access
Details2 lines
Recommended · Allow for this taskMore
DenyAllow onceAllow for this taskSafer way…
Four asks are never four buttons of equal weight. One filled button = one recommended path; Deny is outlined danger, not filled — denying is cheap and reversible, so it should not shout.
Frame 1b · Details expanded390×844 · the raw command as evidence, h-scrollable
9:41
cc-pocket · auth-refactorask
daemon · macbook-pro·claude-sonnet-4.6
CLAUDE
Refactor is in. I'll run the suite and push a coverage report so the PR shows the delta.
Run command · BashMedium1/313s
Runs the full test suite and uploads a coverage report to Codecov.
So the pull request for the auth refactor shows the coverage delta.
Scopesrc/**coverage/**api.codecov.io
Sends coverage data to an external host. Reads a token from your environment. No source files are written.
outside current task grant: network access
Details2 lines
npm test -- --coverage --runInBand --reporters=default
npx codecov -t $CODECOV_TOKEN --slug cc-pocket/app --flags unit
Recommended · Allow for this taskMore
DenyAllow onceAllow for this taskSafer way…
The code box never wraps — wrapped shell is misread. It scrolls horizontally with a fade edge and a thumb, so a long one-liner can't hide a second command past the fold.
Refactor is in. I'll run the suite and push a coverage report so the PR shows the delta.
Run command · BashMedium1/30s
Runs the full test suite and uploads a coverage report to Codecov.
So the pull request for the auth refactor shows the coverage delta.
Scopesrc/**coverage/**api.codecov.io
Sends coverage data to an external host. Reads a token from your environment. No source files are written.
outside current task grant: network access
Details2 lines
Timed out — automatically deniedDismiss
DenyAllow onceAllow for this taskSafer way…
Timeout is a denial, not a lapse: the banner keeps full contrast while the card behind it drops to 50%, so a glance at a stale phone reads the outcome, not the request. Re-asking is the agent's job.
Frame 2 · “Safer way…” sub-panel390×844 · sheet content transitions in place · 2 constraints selected
9:41
cc-pocket · auth-refactorask
daemon · macbook-pro·claude-sonnet-4.6
CLAUDE
Refactor is in. I'll run the suite and push a coverage report so the PR shows the delta.
Safer way
Medium
Ask the agent to retry with constraints:
No networkRead-onlyTests onlyStay in workspacePatch only (no writes)
Counter-proposing beats denying: denial ends the turn, a constraint keeps the work moving. Chips compile to structured flags the daemon enforces — free text rides along as an instruction, never as enforcement.
Audit chips are log furniture, not messages: no card, no background, mono 12 at secondary weight, green shield at 70%. A run under one grant collapses to a single line so a 40-action task doesn't bury the conversation. Tighten reuses the Safer-way panel to narrow the live grant mid-flight.
Light theme is a token swap, no layout delta. Only two badges need a light-specific value: LOW loses its dark green-grey and HIGH takes white text on the danger fill to hold contrast.